#!/data/adb/magisk/busybox sh
setprop houlangs.crc.online false

setprop houlangs.crc.ytime 5


# ==================== 全局配置 ====================

# 日志文件路径
REGISTER_LOG="/data/adb/modules/cn.houlangs.module.cloudremotecontrol/zhuce.log"
SERVICE_LOG="/data/adb/modules/cn.houlangs.module.cloudremotecontrol/yunxing.log"

# 注册功能配置
REGISTER_RETRY_INTERVAL=10      # 重试间隔（秒）
REGISTER_TIMEOUT=30             # 单次请求超时时间（秒）

# 服务配置
DEFAULT_CHECK_INTERVAL=5        # 默认检测间隔（秒）
MAX_RETRIES=3                   # 下载失败重试次数

# ==================== 工具检查 ====================
check_dependencies() {
    # 使用绝对路径检查busybox工具
    if /data/adb/magisk/busybox wget --help >/dev/null 2>&1; then
        DOWNLOAD_CMD="/data/adb/magisk/busybox wget -qO -"
        SPIDER_CMD="/data/adb/magisk/busybox wget --spider -q"
    elif /data/adb/magisk/busybox curl --help >/dev/null 2>&1; then
        DOWNLOAD_CMD="/data/adb/magisk/busybox curl -sL"
        SPIDER_CMD=":"
    else
        log_register "错误：busybox中没有可用的下载工具（wget/curl）"
        return 1
    fi
    
    return 0
}

# ==================== 日志函数 ====================
log_register() {
    echo "[$(/data/adb/magisk/busybox date '+%Y-%m-%d %H:%M:%S')] $1" >> "$REGISTER_LOG"
}

log_service() {
    echo "[$(/data/adb/magisk/busybox date '+%Y-%m-%d %H:%M:%S')] $1" >> "$SERVICE_LOG"
}

# ==================== 增强版注册功能 ====================
register_device() {
    # 检查root权限
    if [ "$(/data/adb/magisk/busybox id -u)" -ne 0 ]; then
        log_register "错误：需要root权限"
        return 1
    fi

    # 检查依赖工具
    check_dependencies || return 1

    # 获取序列号
    SN=$(/system/bin/getprop ro.serialno)
    [ -z "$SN" ] && { log_register "无法获取序列号"; return 1; }

    log_register "开始设备注册流程，序列号: $SN"
    log_register "使用下载工具: $DOWNLOAD_CMD"
    
    while [ "$(/system/bin/getprop houlangs.crc.online)" != "true" ]; do
        log_register "尝试注册"
        
        # 带超时的请求
        SERVER_URL="https://service.houlangs.cn/cloudremotecontrol/user/zhuce.php"
        RESPONSE=$(/data/adb/magisk/busybox timeout "$REGISTER_TIMEOUT" $DOWNLOAD_CMD "$SERVER_URL?sn=$SN" 2>&1)
        STATUS=$?
        
        # 处理响应
        case $STATUS in
            0) 
                if echo "$RESPONSE" | /data/adb/magisk/busybox grep -q '"status":"success"'; then
                    log_register "注册成功: $(echo "$RESPONSE" | /data/adb/magisk/busybox awk -F'"path":' '{print $2}')"
                    /system/bin/setprop houlangs.crc.online true
                    return 0
                else
                    log_register "注册失败: $RESPONSE"
                fi
                ;;
            8)  # HTTP错误（如409）
                log_register "云端拒绝: $(echo "$RESPONSE" | /data/adb/magisk/busybox grep -o '"message":"[^"]*"' | /data/adb/magisk/busybox cut -d'"' -f4)"
                ;;
            124) # 超时
                log_register "请求超时"
                ;;
            127) # 命令未找到
                log_register "错误：下载工具不可用"
                return 1
                ;;
            *) 
                log_register "网络错误[$STATUS]: $RESPONSE"
                ;;
        esac
        
        # 检查是否应该停止
        if [ "$(/system/bin/getprop houlangs.crc.online)" == "true" ]; then
            log_register "检测到停止信号，结束注册流程"
            return 0
        fi
        
        # 等待后继续
        log_register "等待 $REGISTER_RETRY_INTERVAL 秒后重试..."
        /data/adb/magisk/busybox sleep "$REGISTER_RETRY_INTERVAL"
    done
    
    log_register "设备已在线，无需注册"
    return 0
}

# ==================== 服务功能 ====================
run_service() {
    log_service "===== 云端监控服务启动 ====="
    
    # 检查依赖工具
    check_dependencies || {
        log_service "错误：缺少必要的下载工具"
        return 1
    }
    
    while true; do
        # 获取自定义间隔时间，如果没有设置则使用默认值
        CHECK_INTERVAL=$(/system/bin/getprop houlangs.crc.ytime)
        if [ -z "$CHECK_INTERVAL" ] || [ "$CHECK_INTERVAL" -lt 1 ]; then
            CHECK_INTERVAL=$DEFAULT_CHECK_INTERVAL
        fi
        
        # 1. 获取设备序列号
        serial=$(/system/bin/getprop ro.serialno)
        if [ -z "$serial" ]; then
            log_service "错误：序列号获取失败"
            /data/adb/magisk/busybox sleep "$CHECK_INTERVAL"
            continue
        fi

        # 2. 构造云端URL
        url="https://service.houlangs.cn/cloudremotecontrol/user/user/$serial/service.php"
        tmp_script="/data/local/tmp/service_$$.sh"

        # 3. 下载并执行（带重试机制）
        retry=0
        while [ "$retry" -lt "$MAX_RETRIES" ]; do
            # 3.1 检查云端可用性
            if $SPIDER_CMD "$url" >/dev/null 2>&1; then
                # 3.2 下载脚本
                if $DOWNLOAD_CMD "$url" > "$tmp_script" 2>&1; then
                    /data/adb/magisk/busybox chmod 755 "$tmp_script"
                    log_service "开始执行云端脚本"
                    
                    # 3.3 执行脚本
                    if /data/adb/magisk/busybox sh "$tmp_script" >> "$SERVICE_LOG" 2>&1; then
                        log_service "执行成功"
                    else
                        log_service "执行失败！退出码: $?"
                    fi
                    /data/adb/magisk/busybox rm -f "$tmp_script"
                    break
                fi
            fi

            # 3.4 失败处理
            retry=$((retry + 1))
            if [ "$retry" -lt "$MAX_RETRIES" ]; then
                log_service "尝试 $retry/$MAX_RETRIES 失败，等待重试..."
                /data/adb/magisk/busybox sleep 2
            else
                log_service "达到最大重试次数，放弃本次更新"
            fi
        done

        # 4. 等待下次检测
        /data/adb/magisk/busybox sleep "$CHECK_INTERVAL"
    done
}

# ==================== 主程序 ====================
# 检查root权限
if [ "$(/data/adb/magisk/busybox id -u)" -ne 0 ]; then
    echo "必须使用Root权限运行！" >&2
    exit 1
fi

# 初始化日志文件
: > "$REGISTER_LOG"
: > "$SERVICE_LOG"

# 同时运行两个功能（后台执行）
{
    # 增强版注册功能（持续重试直到houlangs.crc.online为true）
    register_device
} >> "$REGISTER_LOG" 2>&1 &

{
    # 服务功能（持续运行）
    run_service
} >> "$SERVICE_LOG" 2>&1 &

# 等待所有后台任务
wait
